<?php

class WeixinApi{
	/**
	 * 获取基础access_token
	 * @param unknown $appid
	 * @param unknown $secret
	 * @param unknown $code
	 * @return multitype:unknown mixed |string
	 */
	public static function get_access_token($appid,$secret){
        $json=WeixinMenu::http_request_json("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret);  
        $data=json_decode($json,true);  
        if($data['access_token']){  
            return $data['access_token'];  
        }else{  
            return "获取access_token错误";  
        }         
    }  
	
	
	
	
	/**
	 * 获取用户网页授权接口调用凭证  access_token和$openid
	 * @param unknown $appid
	 * @param unknown $secret
	 * @param unknown $code
	 * @return multitype:unknown mixed |string
	 */
	public static function getaccess_token($appid,$secret,$code){
		$json=WeixinApi::http_request_json("https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code");
		//print_r($json);
		
		$data=json_decode($json,true);
		$dataarray=array();
		if($data['access_token']&&$data['openid']){
			$openid=$data['openid'];
			$dataarray['openid']=$data['openid'];
			return $openid;
		}else{
			return "获取access_token错误";
		}
	}
	
	/**
	 * 获取用户信息
	 * @param unknown $access_token 网页授权接口调用凭证,注意：此access_token与基础支持的access_token不同
	 * @param unknown $openid
	 * @return multitype:unknown mixed |string
	 */
	
	
	public static function getuserinfo($access_token,$openid){
		$json=WeixinApi::http_request_json("https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN");
		$data=json_decode($json,true);
		$dataarray=array();
		if($data['subscribe']&&$data['subscribe']==1){
			$dataarray['subscribe']=$data['subscribe'];
			$dataarray['nickname']=$data['nickname'];     //姓名
			$dataarray['sex']=$data['sex'];               //年龄
			$dataarray['city']=$data['city'];             //城市
			$dataarray['province']=$data['province'];     //省
			$dataarray['country']=$data['country'];       //国家
			$dataarray['headimgurl']=$data['headimgurl']; //头像url
			return $dataarray;
		}else if($data['subscribe']&&$data['subscribe']==0){
			$dataarray['subscribe']=$data['subscribe'];
			$dataarray["meg"]='用户未关注该公众号';
		}else{
			return "获取access_token错误";
		}
	}
	
	/**
	 * $jsonData参数：
	 * 1.expire_seconds	 该二维码有效时间，以秒为单位。 最大不超过1800。
	 * 2.action_name	 二维码类型，QR_SCENE为临时,QR_LIMIT_SCENE为永久
	 * 3.action_info	 二维码详细信息
	 * 4.scene_id	 场景值ID，临时二维码时为32位非0整型，永久二维码时最大值为100000（目前参数只支持1--100000）
	 * 
	 * 示例：永久二维码：{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
	 *     临时二维码：{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
	 * 获取带参数二维码
	 * @param unknown $url
	 * @return mixed
	 */
	public static function getqrcode($access_token,$expire_seconds,$scene_id){
		//若创建永久二维码$expire_seconds参数值为null
		$jsonData='';
		if($expire_seconds!=null&&$expire_seconds!=''){
			$jsonData='{"expire_seconds": '.$expire_seconds.', "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
		}else{
			$jsonData='{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$scene_id.'}}}';
		}
		$url="https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token;
		$jsonresult=WeixinApi::post($url, $jsonData);
		$dataresult=json_decode($jsonresult,true);
		if($dataresult['ticket']){
			//$ticket=urlencode($dataresult['ticket']);
			$qrcodeUrl="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$dataresult['ticket'];//.$ticket;
			return $qrcodeUrl;
		}else{
			return "生成二维码错误";
		}
	}
//
//
//	发送消息json数据参数示例
//	
// 	发送文本消息
// 	{
// 		"touser":"OPENID",
// 		"msgtype":"text",
// 		"text":
// 		{
// 			"content":"Hello World"
// 		}
// 	}
	
	
// 	发送图片消息
// 	{
// 		"touser":"OPENID",
// 		"msgtype":"image",
// 		"image":
// 		{
// 			"media_id":"MEDIA_ID"
// 		}
// 	}
	
	
// 	发送语音消息
	
// 	{
// 		"touser":"OPENID",
// 		"msgtype":"voice",
// 		"voice":
// 		{
// 			"media_id":"MEDIA_ID"
// 		}
// 	}
	
	
// 	发送视频消息
	
// 	{
// 		"touser":"OPENID",
// 		"msgtype":"video",
// 		"video":
// 		{
// 			"media_id":"MEDIA_ID",
// 			"title":"TITLE",
// 			"description":"DESCRIPTION"
// 		}
// 	}
	
	
// 	发送音乐消息
	
// 	{
// 		"touser":"OPENID",
// 		"msgtype":"music",
// 		"music":
// 		{
// 			"title":"MUSIC_TITLE",
// 			"description":"MUSIC_DESCRIPTION",
// 			"musicurl":"MUSIC_URL",
// 			"hqmusicurl":"HQ_MUSIC_URL",
// 			"thumb_media_id":"THUMB_MEDIA_ID"
// 		}
// 	}
	
// 	发送图文消息
	
// 	图文消息条数限制在10条以内，注意，如果图文数超过10，则将会无响应。
	
// 	{
// 		"touser":"OPENID",
// 		"msgtype":"news",
// 		"news":{
// 		"articles": [
// 		{
// 			"title":"Happy Day",
// 			"description":"Is Really A Happy Day",
// 			"url":"URL",
// 			"picurl":"PIC_URL"
// 		},
// 		{
// 			"title":"Happy Day",
// 			"description":"Is Really A Happy Day",
// 			"url":"URL",
// 			"picurl":"PIC_URL"
// 		}
// 		]
// 	}
// 	}
	
	/**
	 * 发送客服消息
	 * 参数说明：
	 * 参数名            		        是否必须                 说明
	 * touser	 		是	                    普通用户openid
	 * msgtype			 是	                    消息类型，
	 * content			 是	                    文本消息内容
	 * media_id			 是	                    发送的图片的媒体ID
	 * title			 否	                    消息的标题
	 * description	 	否	                    消息的描述
	 * musicurl	    	是		      音乐链接
	 * hqmusicurl	 	是	                    高品质音乐链接，wifi环境优先使用该链接播放音乐
     * thumb_media_id	是	                    缩略图的媒体ID
	 * url			              否	 	      点击后跳转的链接
	 * picurl	 		否		       图文消息的图片链接，支持JPG、PNG格式，较好的效果为大图640*320，小图80*80
	 * @param unknown $url
	 * @return mixed
	 */
	public static function getmessagesend($access_token,$jsonData){
		$url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token;
		$jsonresult=WeixinApi::post($url, $jsonData);
		$dataresult=json_decode($jsonresult,true);
		if($dataresult['media_id']){
			$media_id=$dataresult['media_id'];
			return $media_id;
		}else{
			return $dataresult;
		}
	}
// 	{
// 		"articles": [
// 		{
// 			"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
// 			"author":"xxx",
// 			"title":"Happy Day",
// 			"content_source_url":"www.qq.com",
// 			"content":"content",
// 			"digest":"digest"
// 		},
// 		{
// 			"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
// 			"author":"xxx",
// 			"title":"Happy Day",
// 			"content_source_url":"www.qq.com",
// 			"content":"content",
// 			"digest":"digest"
// 		}
// 		]
// 	}
	
	
	/**
	 * 高级群发接口
	 * @param unknown $url
	 * @return mixed
	 */
//参数说明
// 	                                                                 是否必须
// 	thumb_media_id		 是	 图文消息缩略图的media_id，可以在基础支持-上传多媒体文件接口中获得
// 	author				 否	 图文消息的作者
// 	title				 是	 图文消息的标题
// 	content_source_url	 否	 在图文消息页面点击“阅读原文”后的页面
// 	content				 是	 图文消息页面的内容，支持HTML标签
// 	digest				 否	 图文消息的描述

// 	$dataArray内数据示例  最多10条
//  array(0=>"array(
// 			"thumb_media_id" => "thumb_media_id",
// 			"author" => "author",
// 			"title" => "title",
// 			"content_source_url" => "content_source_url",
// 			"content" => "content",
// 			"digest" => "digest",
// 			);
//		(1=>"array(
// 			"thumb_media_id" => "thumb_media_id",
// 			"author" => "author",
// 			"title" => "title",
// 			"content_source_url" => "content_source_url",
// 			"content" => "content",
// 			"digest" => "digest",
// 			);
//		");
	
	//上传图文消息素材
	public static function getuploadnew_media_id($access_token,$dataArray){
		$jsondatas='';
		if(count($dataArray)>0){
			$datas='';
			$arraycount=count($dataArray);
			if($arraycount>10){
				$arraycount=10;
			}
			for($i=0;$i<$arraycount;$i++){
// 				$articles='';
// 				$thumb_media_id='';
// 				$author='';
// 				$title='';
// 				$content_source_url='';
// 				$content='';
// 				$digest='';
				$data='';
				$newarray=$dataArray[$i];
				if($newarray['thumb_media_id']){
					$thumb_media_id='"thumb_media_id"'.":".'"'.$newarray['thumb_media_id'].'"';
					$data=$thumb_media_id;
				}else{
					return " 图文消息缩略图的media_id是必须有的参数";
				}
				if($newarray['author']){
					$author='"author"'.":".'"'.$newarray['author'].'"';
					$data=$data.','.$author;
				}
				if($newarray['title']){
					$title='"title"'.":".'"'.$newarray['title'].'"';
					$data=$data.','.$title;
				}else{
					return "  图文消息的标题是必须有的参数";
				}
				if($newarray['content_source_url']){
					$content_source_url='"content_source_url"'.":".'"'.$newarray['content_source_url'].'"';
					$data=$data.','.$content_source_url;
				}
				if($newarray['content']){
					$content='"content"'.":".'"'.$newarray['content'].'"';
					$data=$data.','.$content;
				}else{
					return "  图文消息的标题是必须有的参数";
				}
				if($newarray['digest']){
					$digest='"digest"'.":".'"'.$newarray['digest'].'"';
					$data=$data.','.$digest;
				}
				$jsondata='{'.$data.'}';
				if($datas==''){
					$datas=$jsondata;
				}else{
					$datas=$datas.','.$jsondata;
				}
			}
			
			$jsondatas='{"articles": ['.$datas.']}';
			$url="https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=".$access_token;
			$jsonresult=WeixinApi::post($url, $jsondatas);
			$dataresult=json_decode($jsonresult,true);
			if($dataresult['media_id']){
				$media_id= $dataresult['media_id'];
				return $media_id;
			}else{
				return "图文消息素材上传错误";
			}
			
		}else{
			return "图文消息素材上传错误";
		}
	}
	
	/**
	 * 根据OpenID列表群发
	 * @param unknown $access_token
	 * @param unknown $openidarray 发送对象的open_id集合
	 * @param unknown $media_id    上传成功的消息内容ID
	 */
	public static function getmesssend($access_token,$openidarray,$media_id){
		if(count($openidarray)>0){
			$newdata='';
			$openiddata='';
			for($i=0;$i<count($openidarray);$i++){
				$open_id='"'.$openidarray[$i].'"';
				if($openiddata==''){
					$openiddata=$open_id;
				}else{
					$openiddata=$openiddata.','.$open_id;
				}
			}
			$newdata='{"touser":['.$openiddata.'],"mpnews":{"media_id":"'.$media_id.'"},"msgtype":"mpnews"}';
			$url="https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=".$access_token;
			$jsonresult=WeixinApi::post($url, $newdata);
			$dataresult=json_decode($jsonresult,true);
			if($dataresult['errcode']==0){
				if(strstr($dataresult['errmsg'],'success')){
					return $dataresult['msg_id'];    //发送出去的消息ID 可用于删除消息等。
				}else{
					return "创建群发消息任务失败";
				}
			}else{
				return "创建群发消息任务失败";
			}
		}
	}
	
	
	
	/**
	 * 删除群发消息
	 * @param unknown $url
	 * @return mixed
	 * $msg_id：发送出去的消息ID
	 * 只有已经发送成功的消息才能删除，删除消息只是将消息的图文详情页失效，已经收到的用户，还是能在其本地看到消息卡片。
	 */
	public static function getdeletenew($access_token,$msg_id){
		if($msg_id!=null&&$msg_id!=''){
			$msgiddata='{"msgid":'.$msg_id.'}';
			
			$url="https://api.weixin.qq.com//cgi-bin/message/mass/delete?access_token=".$access_token;
			$jsonresult=WeixinApi::post($url, $msgiddata);
			$dataresult=json_decode($jsonresult,true);
			if($dataresult['errmsg']=='ok'){
					return "群发消息删除成功";
			}else{
				return "群发消息删除失败";
			}
			
		}
		
	}
	

	
	
	
	
	public static function http_request_json($url){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		$result = curl_exec($ch);
		curl_close($ch);
		return $result;
	}
	
	
	public static  function post($url, $jsonData){
		$ch = curl_init() ;
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	
		$result = curl_exec($ch) ;
	
	
		if (curl_errno($ch)) {
			echo 'Error'.curl_error($ch);
		}
	
		curl_close($ch) ;
	
		//echo $result;
	
		return $result;
	}
	
	
	
}